热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

学说|高亮_关于可编辑输入框的focus设置

篇首语:本文由编程笔记#小编为大家整理,主要介绍了关于可编辑输入框的focus设置相关的知识,希望对你有一定的参考价值。最近在开发当中遇到一种需求,要根据某

篇首语:本文由编程笔记#小编为大家整理,主要介绍了关于可编辑输入框的focus设置相关的知识,希望对你有一定的参考价值。


最近在开发当中遇到一种需求,要根据某些条件来对WebView弹出键盘与否进行控制,本来想使用setFocusable(false)和setFocuseable(true)来控制,但是发现取消焦点再设置焦点后控件的焦点一闪就消失了。
然后找到了一位同学说用setFocusableInTouchMode可以解决类似问题,ps:他是解决edittext的。
我试了一下果然可以通用。下面就是他的代码:


public class TestInputActivity extends Activity
int index = 0;
EditText et;
int inType;
Handler handler = new Handler(new Handler.Callback()
@Override
public boolean handleMessage(Message msg)
et.setFocusableInTouchMode(true);
et.setSelection(0);
return false;

);
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
et = (EditText) findViewById(R.id.et);
et.setFocusableInTouchMode(false);
et.setOnClickListener(new OnClickListener()
@Override
public void onClick(View v)
if(index == 0)
inType = et.getInputType(); // backup the input type
et.setInputType(1); // disable soft input
et.setFocusableInTouchMode(false);
et.clearFocus();
index = 1;
else if(index == 1)
et.setInputType(inType); // restore input type
et.setFocusableInTouchMode(true);
et.requestFocus();
index = 0;


);

基本上游戏到这里就结束了,然后这位同学并没有告知原理,我感到十分不开心。就顺便搜了一下。然后,还是度娘比较给力:

android的Touch Mode

大多数Android设备都是触摸屏的,但是实际上Android设备也支持键盘操作,允许通过键盘来完成导航,点击,输入等。
当用户通过键盘(或者轨迹球)操作的时候,有必要聚焦当前接受输入的UI元素,例如,高亮(聚焦)某个按钮,让用户知道当前正在操作的UI元素是哪个。
但是,当用户使用触摸屏与设备交互的时候,始终聚焦当前UI元素就没有必要了,而且很丑陋;用户点击哪个元素,哪个元素就是当前元素,无需高亮标识。并且,通过触摸屏与设备交互的时候,点击某个UI元素也不会导致该元素聚焦,此时的高亮效果是由Pressed状态来完成的。也就是说,在Touch Mode模式之下,UI元素是不会进入聚焦状态的,即使调用requestFocus也不会。
那个,Android是如何区分这两种情况的呢?
答案就是Touch Mode。当用户开始通过键盘与设备交互的时候,设备就退出Touch Mode模式;当用户开始通过触摸屏与设备交互的时候,设备就进入Touch Mode模式。可以通过调用View的isInTouchMode来判断设备当前是否处于Touch Mode模式。
但是,也有例外情况。有些UI元素,即使是在Touch Mode的状态之下,也需要获得焦点,典型的就是Edittext。那么,这种情况该如何处理呢?
答案就是做特殊处理。Android规定,某些元素,即使是在Touch Mode模式下,也可以获得焦点。调用View的setFocusableInTouchMode(true)可以使View在Touch Mode模式之下仍然可获得焦点(像Edittext就是在内部设置了这个属性),调用isFocusableInTouchMode可以判断View是否可在Touch Mode模式下聚焦。

推荐阅读
author-avatar
今生绝恋2702934494
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有